home *** CD-ROM | disk | FTP | other *** search
- /* smerge.c - do a string merge making 1 output run */
- #include "stdio.h"
- #include "merge1.h"
-
- int mergecmp() ; /* declare finction before ref. */
- FILE *do_open() ;
- extern int (*compfun) () ; /* address of compare function */
-
- int smerge(md,m,outf)
- MDATA md[] ; /* file pointer to buffer address */
- int m ;
- FILE *outf ;
- {
- int i ;
- MDATA *prec[ MAX_MERGE ] ; /* set up pointers to merge data */
- /* & get a record from each run */
- for( i=0 ; i<m ; i=i+1 )
- { prec[i] = & md[i] ;
- getrec(prec[i]->pbuf,MAX_RSIZE,prec[i]->inf) ;
- } ;
- memsort(prec,m,mergecmp) ; /* sort them (decending order) */
-
- while( m > 0 ) /* repeat until all runs exhausted */
- { /* write out rec. with lowest key */
- putrec(prec[m-1]->pbuf ,outf) ;
- /* and read another from same run */
- if( getrec(prec[m-1]->pbuf,MAX_RSIZE,prec[m-1]->inf) <= 0 )
- m = m - 1 ;
- else resort(prec,m,mergecmp) ;
- }
- }
-
-
- int mergecmp(p1,p2) /* compare function */
- MDATA *p1 ; /* pointers to merge data */
- MDATA *p2 ;
- { /* compare strings in buffer areas */
- /* reverse sign for descending sort */
- return( - (*compfun) (p1->pbuf, p2->pbuf) ) ;
- }
-
-
-